#!/bin/env bash

##########################################################################
# ShellBoot
##########################################################################
# Descrição: Este script cria um pendrive bootável usando o programa 'dd'.
# Autor: Nezo
# Data: 30/05/2023
##########################################################################

# Verifica se o script está sendo executado como root
if [[ $EUID -ne 0 ]]; then
    echo -e "\033[31;1mExecute o script como root.\033[m"
    exit 1
fi

# Verifica se o comando 'dd' está instalado
if ! command -v dd &> /dev/null; then
    echo "Instale o programa 'dd' para continuar."
    exit 1
fi

# AVISO
clear

# Mensagem de boas-vindas
echo -e "\033[35;1mBem vindo ao ShellBoot, siga os passos a seguir para criar seu pendrive bootavável!\033[m\n"

# Aviso
echo -e "\033[31;1m\nTenha em mente que é sempre importante ter cuidado ao usar esse programa, pois ele pode causar perda de dados se usado incorretamente. Certifique-se de fornecer os caminhos corretos para o pendrive e a ISO antes de executar esse script.\033[m\n"

echo -e "\033[1m"

# Solicita a entrada do local do pendrive e da ISO
read -p "Digite o local do pendrive que deseja tornar bootavel (Exemplo: /dev/sdc): " DRIVE
if [[ -z "$DRIVE" ]]; then
    echo "Entrada inválida. O local do pendrive não pode estar vazio."
    exit 1
fi

read -p "Agora digite o local onde a sua ISO está armazenada (Exemplo: /home/joão/Downloads/imagem.iso): " ISO
if [[ -z "$ISO" ]]; then
    echo "Entrada inválida. O local da ISO não pode estar vazio."
    exit 1
fi

# Remove possíveis espaços em branco no início e fim das entradas
DRIVE=${DRIVE##*( )}
DRIVE=${DRIVE%%*( )}
ISO=${ISO##*( )}
ISO=${ISO%%*( )}

# Imprime os valores das variáveis
echo -e "\nOs valores fornecidos foram:"
echo "Local do pendrive: $DRIVE"
echo "Local da ISO: $ISO"

# Solicita a confirmação do usuário
read -p "Os valores estão corretos? (S/N): " CONFIRMATION
CONFIRMATION=${CONFIRMATION^^}

# Verifica a confirmação do usuário
if [[ "$CONFIRMATION" != "S" ]]; then
    echo "Operação cancelada pelo usuário."
    exit 0
fi

echo -e "\033[m"

echo -e "\033[35;1m\nIniciando...\033[m\n"
sleep 2

# Desmonta o dispositivo antes de prosseguir
umount "$DRIVE" &> /dev/null
if [[ $? -ne 0 ]]; then
    echo -e "\033[1m"
    read -p "Erro ao desmontar a unidade. Deseja continuar mesmo assim?(S/N) " OPT
    echo -e "\033[m"
    OPT=${OPT^^}
    if [[ $OPT != "S" ]]; then
    exit 1
    fi
fi

# Formata o dispositivo como FAT32
echo -e "\033[35;1mFormatando a unidade...\033[m"
mkfs.vfat -I -n BOOTABLE "${DRIVE}"
if [[ $? -ne 0 ]]; then
    echo -e "\033[31;1mErro ao formatar a unidade.\033[m"
    exit 1
fi

# Grava a ISO no pendrive usando o comando dd
echo -e "\033[35;1m\nGravando a ISO no pendrive...\033[m"
echo -e "\033[42;30m"

dd if="${ISO}" of="${DRIVE}" bs=4M status=progress && sync

echo -e "\033[m"
if [[ $? -eq 0 ]]; then
    echo -e "\033[32;1mO pendrive está pronto para uso. [OK]\033[m"
    exit 0
else
    echo -e "\033[m\033[31;1mErro ao gravar a ISO no pendrive.\033[m"
    exit 1
fi

